.global _syscall
.extern _syscall_handler
.extern msg

_syscall:
	pusha
	push %ds
	push %es
	push %fs
	push %gs
	mov $0x10, %ax  # Load the Kernel Data Segment descriptor!
	mov %ax  , %ds
	mov %ax  , %es
	mov %ax  , %fs
	mov %ax  , %gs
	mov %esp, %eax
	push %eax
	#mov $(syscall_handler), %eax 
	lcall $0x08,$_syscall_handler       # A special call, preserves the 'eip' register
	pop %eax
	pop %gs
	pop %fs
	pop %es
	pop %ds
	popa
	iret
